import itertools

# 输入的16个数字
input_str = input("请一次性输入16个数字，用空格隔开：")
numbers = [float(x) for x in input_str.split()]

if len(numbers) != 16:
    print("输入的数字个数不正确，请重新输入。")
else:
    print("输入的16个数字为：", numbers)

# 生成所有的6个数字组合
all_combinations = set(itertools.combinations(numbers, 6))


# 定义一个函数来生成最小的覆盖子集
def fun(num, k, t, all_combinations):
    # 初始化覆盖设计为空列表
    covering_design = []

    # 当还有未覆盖的组合时继续循环
    while all_combinations:
        # 寻找能够覆盖最多未覆盖组合的7个数字的组合
        best_subset = None
        max_coverage = 0

        for subset in itertools.combinations(num, k):
            # 计算这个7个数字组合能够覆盖的6个数字组合数量
            new_coverage = len(set(itertools.combinations(subset, t)) & all_combinations)
            if new_coverage > max_coverage:
                max_coverage = new_coverage
                best_subset = subset

        if best_subset is not None:
            # 添加最佳的7个数字的组合到覆盖设计中
            covering_design.append(best_subset)
            # 更新剩余需要覆盖的组合集合
            all_combinations -= set(itertools.combinations(best_subset, t))
        else:
            break  # 如果没有新的组合可以增加覆盖，则退出循环

    return covering_design


# 生成覆盖设计
cover = fun(numbers, 7, 6, all_combinations)

# 输出结果
print("生成的覆盖设计包含以下数组:")
for array in cover:
    print(array)

# 输出数组的数量
print(f"总共生成了 {len(cover)} 个数组")